﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Mvc;

namespace SPMS.Common
{
    /// <summary>
    /// 表示一个特性，该特性用于限制调用方对操作方法的访问。
    /// </summary>
    public class AuthorizeExAttribute : AuthorizeAttribute
    {
        /// <summary>
        /// 在过程请求授权时调用。
        /// </summary>
        /// <param name="filterContext">筛选器上下文，它封装有关使用<see cref="T:System.Web.Mvc.AuthorizeAttribute" />的信息。</param>
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            //判断是否使用JSON返回错误信息
            if (filterContext.ActionDescriptor.IsDefined(typeof(JsonHandleErrorAttribute), true))
            {
                //判断是否认证成功
                if (!this.AuthorizeCore(filterContext.HttpContext))
                {
                    //抛出异常
                    throw new UnauthenticatedException();
                }
            }
            else
            {
                //调用基类实现
                base.OnAuthorization(filterContext);
            }
        }
    }
}
